/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.lostreseditores.sesion;

import com.lostreseditores.modelo.RolUsuario;
import com.lostreseditores.modelo.Usuario;
import com.lostreseditores.persistencia.UsuarioFacadeLocal;
import java.io.IOException;
import java.util.List;
import javax.ejb.EJB;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author DILOVE
 */
public class FiltroSesionCalificacion implements Filter {

    private FilterConfig configuration;
    
    @EJB
    private UsuarioFacadeLocal usuarioDAO;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.configuration = filterConfig;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        Usuario u = (Usuario) ((HttpServletRequest) request).getSession().getAttribute("usuarioSacpe");
        Usuario nuevo;
        if (u != null) {
            System.out.println("Usuario "+u.getIdUsuario());
            nuevo = usuarioDAO.find((Object)u.getIdUsuario());
            System.out.println("Roles "+nuevo.getRolUsuarioList().size());
            if (!validarRoles(nuevo)) {
                ((HttpServletResponse) response).sendRedirect("../faces/SesionInvalida.xhtml");
            } else {
                chain.doFilter(request, response);
            }
        }else{
            ((HttpServletResponse) response).sendRedirect("../faces/SesionInvalida.xhtml");
        }

    }

    public boolean validarRoles(Usuario u) {
        List<RolUsuario> r = u.getRolUsuarioList();
        for (int i = 0; i < r.size(); i++) {
            if (r.get(i).getEstado() && r.get(i).getIdRol().getNombrerol().equals("CALIFICACION")) {
                return true;
            }
        }
        return false;
    }

    @Override
    public void destroy() {
        this.configuration = null;
    }

}
